<?php
/**
 * 問合せAPI　共通コントローラクラス<br />
 *
 * @package apamanshop
 * @author
 * @copyright
 */
abstract class Inquiry_ApibaseController extends Apm_Controller_Base
{

	//=====判定フラグ=====
	/** ログ作成判定(true:作成 false:作成しない) */
	private $m_bolLogInsFlag;
	/** ユーザ宛て判定(true:通常 false:判定対象) */
	private $m_bolSendUserFlag;
	/** 店舗宛て判定(true:通常 false:判定対象) */
	private $m_bolSendShopFlag;
	/** 本部宛て判定(true:通常 false:判定対象) */
	private $m_bolSendHonbuFlag;
	//=====置換えメールアドレス=====
	/** 店舗宛て差し替えメールアドレス */
	private $m_strReplaceShopMail;
	/** 本部宛て差し替えメールアドレス */
	private $m_strReplaceHonbuMail;

	/** メール送信on/offモード(true:送信 false:送信しない) */
	private $m_sendFlag = true;
	//private $m_sendFlag = false;

	/**
	 * 前処理
	 */
	public function preDispatch()
	{
		// パラメータの取得
		$this->_params = $this->getParameters();

		//初期化
		$this->m_bolLogInsFlag = false;
		$this->m_bolSendUserFlag = false;
		$this->m_bolSendShopFlag = false;
		$this->m_bolSendHonbuFlag = false;
		$this->m_strReplaceShopMail = "";
		$this->m_strReplaceHonbuMail = "";

		//PC用設定
		if ($this->_params['isMobile'] != "1") {
			$this->_isMobile = "1";
			$this->_mode = $this->_params['mode'];
		}
		
	}

	/**
	 * メール送信処理
	 */
	public function sendToiawaseMail($templatePath, $params, $mail_params) {

		//表示テンプレートパス設定
		$this->_display_path = APPLICATION_PATH . '/modules/inquiry/views/mail/' . $templatePath;
		$body = $this->getApmHelper($this->_display_path)->getBlock($params);

		$mail_params['body'] = $body;

		if ($this->m_sendFlag) {
//                         __bdebug($mail_params);
			$result = Apm_Otheritems::SendMailEx($mail_params);
		} else {
			__log_debug_array(__FILE__, __LINE__, __METHOD__, $mail_params);
			$result = true;
		}
		return $result;
	}

	/**
	 * メール送信処理(ジャッジメール判定付き)
	 * $mailKbn = 1:本部 2:店舗 3:ユーザ
	 */
	public function sendToiawaseMailJudge($templatePath, $params, $mail_params, $mailKbn) {
		
		//表示テンプレートパス設定
		$body = '';
		if (!empty($templatePath)) {
			$this->_display_path = APPLICATION_PATH . '/modules/inquiry/views/mail/' . $templatePath;
			$body = $this->getApmHelper($this->_display_path)->getBlock($params);
		} else {
			$body = $params;
		}

		// ジャッジメール判定
		$replaceMail = '';
		switch($mailKbn) {
			case 1:		// 本部
				if(!$this->isSendHonbu()) {
					if($this->getReplaceHonbuMail() != "") {
						// ジャッジメール対象
						$replaceMail = $this->getReplaceHonbuMail();
					} else {
						return true;
					}
				}
				break;
			case 2:		// 店舗
				if(!$this->isSendShop()) {
					if($this->getReplaceShopMail() != "") {
						// ジャッジメール対象
						$replaceMail = $this->getReplaceShopMail();
					} else {
						return true;
					}
				}
				break;
			case 3:		// ユーザ
				if (!$this->isSendUser()) {
					return true;
				}
				break;
			default:
				return false;
				break;
		}
		// ジャッジメールの場合
		if (!empty($replaceMail)) {
			$judgeParams = array();
			
			// FROM
			$judgeText = '';
			if (is_array($mail_params[Apm_Otheritems::SEND_MAIL_EX_FROM_KEY])) {
				foreach($mail_params[Apm_Otheritems::SEND_MAIL_EX_FROM_KEY] as $key=>$val) {
					if (!empty($judgeText)) $judgeText .= ",";
					$judgeText .= $key;
				}
				if (!empty($judgeText)) $judgeParams['JudgeMailFrom'] = $judgeText;
			}
			
			// REPLY-TO
			$judgeText = '';
			if (is_array($mail_params[Apm_Otheritems::SEND_MAIL_EX_REPLY_TO_KEY])) {
				foreach($mail_params[Apm_Otheritems::SEND_MAIL_EX_REPLY_TO_KEY] as $key=>$val) {
					if (!empty($judgeText)) $judgeText .= ",";
					$judgeText .= $key;
				}
				if (!empty($judgeText)) $judgeParams['JudgeMailReplyTo'] = $judgeText;
			}
			
			// TO
			$judgeText = '';
			if (is_array($mail_params[Apm_Otheritems::SEND_MAIL_EX_TO_KEY])) {
				foreach($mail_params[Apm_Otheritems::SEND_MAIL_EX_TO_KEY] as $key=>$val) {
					if (!empty($judgeText)) $judgeText .= ",";
					$judgeText .= $key;
				}
				$mail_params[Apm_Otheritems::SEND_MAIL_EX_TO_KEY] = array($replaceMail => "");
				if (!empty($judgeText)) $judgeParams['JudgeMailTo'] = $judgeText;
			}
			
			// CC
			$judgeText = '';
			if (is_array($mail_params[Apm_Otheritems::SEND_MAIL_EX_CC_KEY])) {
				foreach($mail_params[Apm_Otheritems::SEND_MAIL_EX_CC_KEY] as $key=>$val) {
					if (!empty($judgeText)) $judgeText .= ",";
					$judgeText .= $key;
				}
				unset($mail_params[Apm_Otheritems::SEND_MAIL_EX_CC_KEY]);
				if (!empty($judgeText)) $judgeParams['JudgeMailCc'] = $judgeText;
			}
			
			// BCC
			$judgeText = '';
			if (is_array($mail_params[Apm_Otheritems::SEND_MAIL_EX_BCC_KEY])) {
				foreach($mail_params[Apm_Otheritems::SEND_MAIL_EX_BCC_KEY] as $key=>$val) {
					if (!empty($judgeText)) $judgeText .= ",";
					$judgeText .= $key;
				}
				unset($mail_params[Apm_Otheritems::SEND_MAIL_EX_BCC_KEY]);
				if (!empty($judgeText)) $judgeParams['JudgeMailBcc'] = $judgeText;
			}
			
			// テンプレート設定
			$this->_display_path = APPLICATION_PATH . '/modules/inquiry/views/mail/JudgeMail.tpl';
			$body .= $this->getApmHelper($this->_display_path)->getBlock($judgeParams);
		}

		$mail_params[Apm_Otheritems::SEND_MAIL_EX_BODY_KEY] = $body;

//		__adebug($mail_params);

		if ($this->m_sendFlag) {
//                   __bdebug($mail_params);
		  $result = Apm_Otheritems::SendMailEx($mail_params);
		} else {
			__log_debug_array(__FILE__, __LINE__, __METHOD__, $mail_params);
			$result = true;
		}
		return $result;
	}

	/**
	 * メール送信フラグを初期化する
	 * 指定されたメールアドレスを判別に利用して、下記変数の値を設定する
	 *   $m_bolLogInsFlag
	 *   $m_bolSendUserFlag
	 *   $m_bolSendShopFlag
	 *   $m_bolSendHonbuFlag
	 *   $m_strReplaceShopMail
	 *   $m_strReplaceHonbuMail
	 * @param string $strMail メールアドレス
	 */
	protected function setSendMailFlag($strMail)
	{
		//デフォルト
		$this->m_bolLogInsFlag = true;
		$this->m_bolSendUserFlag = true;
		$this->m_bolSendShopFlag = true;
		$this->m_bolSendHonbuFlag = true;

		$this->m_strReplaceShopMail = "";
		$this->m_strReplaceHonbuMail = "";


		if (!Apm_Otheritems::IsNullOrEmpty($strMail))
		{
			//ログを作成しないメールアドレス
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_LOG_NO_INS);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolLogInsFlag = false;
			}
			//ユーザ宛て:送信しない
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_NO_SEND_USER);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendUserFlag = false;
			}
			//店舗宛て:送信しない
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_NO_SEND_SHOP);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendShopFlag = false;
			}
			//店舗宛て:差し替え
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_CHG_SEND_SHOP);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendShopFlag = false;
				$this->m_strReplaceShopMail = $strMail;
			}
			//本部宛て:送信しない
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_NO_SEND_HONBU);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendHonbuFlag = false;
			}
			//本部宛て:差し替え
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_CHG_SEND_HONBU);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendHonbuFlag = false;
				$this->m_strReplaceHonbuMail = $strMail;
			}
			//店舗・本部宛て:モバイル差し替え
			$chkAddr = explode(",", Apm_Config_Mail::MAIL_CHG_SEND_MOBILE);
			if (in_array($strMail, $chkAddr))
			{
				$this->m_bolSendShopFlag = false;
				$this->m_strReplaceShopMail = Apm_Config_Mail::MAIL_MOBILE;
				$this->m_bolSendHonbuFlag = false;
				$this->m_strReplaceHonbuMail = Apm_Config_Mail::MAIL_MOBILE;
			}
		}
	}

	/**
	 * ログを作成しないか
	 *
	 * @return boolean ログを作成するか(true:作成する  false:作成しない)
	 */
	protected function isLogIns()
	{
		return $this->m_bolLogInsFlag;
	}

	/**
	 * ユーザ宛にメール送信するか
	 *
	 * @return boolean ユーザにメール送信するか(true:する  false:しない)
	 */
	protected function isSendUser()
	{
		return $this->m_bolSendUserFlag;
	}

	/**
	 * 店舗宛にメール送信するか
	 *
	 * @return boolean 店舗宛にメール送信するか(true:する  false:しない)
	 */
	protected function isSendShop()
	{
		return $this->m_bolSendShopFlag;
	}

	/**
	 * 本部宛にメール送信するか
	 *
	 * @return boolean 本部宛にメール送信するか(true:する  false:しない)
	 */
	protected function isSendHonbu()
	{
		return $this->m_bolSendHonbuFlag;
	}

	/**
	 * 店舗宛て差し替えメールアドレスを取得する
	 *
	 * @return string 店舗宛て差し替えメールアドレス
	 */
	protected function getReplaceShopMail()
	{
		return $this->m_strReplaceShopMail;
	}

	/**
	 * 本部宛て差し替えメールアドレスを取得する
	 *
	 * @return string 本部宛て差し替えメールアドレス
	 */
	protected function getReplaceHonbuMail()
	{
		return $this->m_strReplaceHonbuMail;
	}

	/**
	 * AOS店舗か判定
	 *
	 * @param string $strShopCd 店舗CD
	 * @return boolean AOS店舗か(true:AOS店舗  false:AOS店舗でない)
	 */
	protected function isAosShop($strShopCd,$db = "")
	{
		$result = false;
		$chkResult1;
		$chkResult2;

		if (!Apm_Otheritems::IsNullOrEmpty($strShopCd))
		{
			//RENKEI_TENPO_WORK取得
			$chkResult1 = $this->_model->JdgAosShopChk1($strShopCd,$db);
			if (count($chkResult1) > 0)
			{
				if ($chkResult1[0]["CNT"] != 0)
				{
					//M05TENPO_INFO取得
					$chkResult2 = $this->_model->JdgAosShopChk2($strShopCd,$db);

					if (count($chkResult2) > 0)
					{
						if (!Apm_Otheritems::IsNullOrEmpty($chkResult2[0]["M05_SHINOPE_START_DATE"]))
						{
							//M05_SHINOPE_START_DATEが現在以前(開始日を過ぎてる)場合AOSとする
							$nowDateNum = date("Ymd", time()) + 0;
							$startDateNum = date("Ymd", $chkResult2[0]["M05_SHINOPE_START_DATE"]) + 0;
							if ($startDateNum <= $nowDateNum)
							{
								$result = true;
							}
						}
					}
				}
			}
		}
		return $result;
	}


	/**
	 * 年月文字列取得
	 * ※日付だけ0詰めなし
	 * @return string 年月文字列
	 */
	protected function GetTimeString()
	{
		//aspのFormatDateTime(Now, vbGen(eralDate)は日付だけ0詰めなし
		//2010年1月1日 1時1分1秒は[2010/01/01 1:01:01]となる
		//2010年11月11日 11時11分11秒は[2010/11/11 11:11:11]となる
		$work = date('YmdGis');
		return $work;
	}

	/**
	 * 表示用現在日時を取得する
	 * ※0詰めなし (2010年1月1日1時1分)
	 * @return string 表示用現在日時
	 */
	protected function GetTimeStringDisp()
	{
		//年に関して文字化けする問題があるので、バラバラに作成して連結。
		//http://mbnk.blog120.fc2.com/blog-entry-189.html
		//また、分に関して0詰め無しがなかったので一旦数値に変換してる
		$result
		= date("Y") . "年"
		. date("n") . "月"
		. date("j") . "日"
		. date("G") . "時"
		. strval(intval(date("i"))) . "分";

		return $result;
	}

	/**
	 * TOIAWASE_SEQ取得(4桁0詰め)
	 * 取得できない場合は0000
	 *
	 * @return string TOIAWASE_SEQ取得(4桁0詰め)
	 */
	protected function GetToiawaseSEQ($db = "")
	{
		$seq = 0;
		$record = $this->_model->GetToiawaseSEQ($db);
		if (count($record) > 0)
		{
			$seq = $record[0]['SEQ_NO'];
		}
		return sprintf("%04d", $seq);
	}

	/**
	 * AOSユーザへのメールの場合のメールヘッダー取得
	 *
	 * @param string $strBukkenCdComma 物件CD(カンマ(,)区切り)
	 */
	protected function GetMailAosParam($strBukkenCdComma)
	{
		$result = array();

		$madori_flag = false;
		$arrPerfCd = array();
		// こだわり変換CD取得
		//$model = new Inquiry_Model_Apibase();
		//$aosKodawari = $model->GetAosKodawari();
		$aosKodawari = $this->_model->GetAosKodawari();

		foreach ($this->_params as $key => $value)
		{
			if (!Apm_Otheritems::IsNullOrEmpty($key))
			{
				if (!$this->isDeleteMailHeaderKey($key))
				{
					if (is_array($value)) {
						// 配列をカンマ区切りへ変更
						$str = "";
						foreach ($value as $val)
						{
							if (!Apm_Otheritems::IsNullOrEmpty($val)) {
								$str .= "," . $val;
							}
						}
						if (!empty($str)) {
							$value = substr($str, 1);	// 最初のカンマ削除
						}
					}
					if (!Apm_Otheritems::IsNullOrEmpty($value))
					{
						if ((strcmp($key, "senyu1") == 0) && (strcmp($value, "1") == 0))
						{
							$value = "0";
						}
						// 配列で渡される為エラーとなるので回避
						if (strlen($value) == 1)
						{
							if ((ord($value) >= 0) && (ord($value) <= 255))
							{
								$value .= " ";
							}
						}
						$value = str_replace(chr(13) . chr(10), " ", $value);
						$value = str_replace(chr(9), " ", $value);
					}
					else
					{
						$value = "  ";
					}
					if (strcmp($key, "TownCd") == 0)
					{
						// 町CD
						$result["asn_SectCd"] = $value;
						
						//町CDカンマ区切りデータを配列へ
						$arrTownCd = explode(',',$value);
						$arrPerfCd = array();	// 初期化
						//町CDの頭2桁を都道府県CDへ
						foreach ($arrTownCd as $townCd) {
							$arrPerfCd[] = substr($townCd, 0, 2);
						}
					}
					else if (strcmp($key, "CityCd") == 0)
					{
						// 市区町村CD
						$result["asn_CityCd"] = $value;
						
						if (empty($arrPerfCd)) {	// 町優先のため既に入っていたら処理しない
							//市区町村CDカンマ区切りデータを配列へ
							$arrCityCd = explode(',',$value);
							//市区町村CDの頭2桁を都道府県CDへ
							foreach ($arrCityCd as $cityCd) {
								$arrPerfCd[] = substr($cityCd, 0, 2);
							}
						}
					}
					else if ((strcmp($key, "syokihiyo") == 0) && (strcmp($value, "w0") == 0))
					{
						// ダブル０
						$result["asn_kodawari_op1"] = "on";
					}
					else if ((strcmp($key, "reikin_nashi") == 0) && (strcmp($value, "on") == 0))
					{
						// 礼金なし
						$result["asn_kodawari_op16"] = "on";
					}
					else if (strpos($key, "madori") !== false)
					{
						// 間取り
						$madori_flag = true;
						switch ($key)
						{
							case "madori10":
								$result["asn_madori1"] = $value;
								break;
							case "madori11":
								$result["asn_madori2"] = $value;
								break;
							case "madori12":
								$result["asn_madori3"] = $value;
								break;
							case "madori14":
								$result["asn_madori4"] = $value;
								break;
							case "madori21":
								$result["asn_madori6"] = $value;
								break;
							case "madori22":
								$result["asn_madori7"] = $value;
								break;
							case "madori24":
								$result["asn_madori8"] = $value;
								break;
							case "madori31":
								$result["asn_madori10"] = $value;
								break;
							case "madori32":
								$result["asn_madori11"] = $value;
								break;
							case "madori34":
								$result["asn_madori12"] = $value;
								break;
							case "madori41":
							case "madori42":
							case "madori44":
							case "madori51":
								$result["asn_madori13"] = $value;
								break;
						}
					}
					else if (strpos($key, "syubetu") !== false)
					{
						// 建物種別
						switch ($key)
						{
							//case "syubetu3":
							//	$result["asn_syubetu3"] = $value;
							//	$result["asn_syubetu7"] = $value;
							//	break;
							case "syubetu4":	// 店舗
								$result["asn_syubetu5"] = $value;
								break;
							case "syubetu5":	// 駐車場
								$result["asn_syubetu4"] = $value;
								break;
							default:
								$result["asn_" . $key] = $value;
								break;
						}
					}
					else if ((strcmp($key, "kodawari112") == 0) && (strcmp($value, "on") == 0))
					{
						// バルコニー・ベランダ
						$result["asn_setubi_op59"] = "on";	// バルコニー
						$result["asn_setubi_op60"] = "on";	// ベランダ
					}
					else if ((strcmp($key, "kodawari113") == 0) && (strcmp($value, "on") == 0))
					{
						// 給湯
						$result["asn_setubi_op8"] = "on";	// 給湯（電気）
						$result["asn_setubi_op9"] = "on";	// 給湯（ガス）
					}
					else if (strpos($key, "kodawari") !== false)
					{
						// こだわり
						$kodawari_id = substr($key, 8);
						if (isset($aosKodawari[$kodawari_id])) {
							$result[$aosKodawari[$kodawari_id]] = $value;
						} else {
							$result["asn_" . $key] = $value;
						}
					}
					else
					{
						$result["asn_" . $key] = $value;
					}
				}
			}
		}

		if (!Apm_Otheritems::IsNullOrEmpty($strBukkenCdComma))
		{
			$result["asn_ID"] = $strBukkenCdComma;
		}
		else
		{
			$result["asn_ID"] = "  ";
			if (!$madori_flag) {
				$result["asn_madori14"] = "on";
			}
			if (!empty($arrPerfCd)) {
				// 一意にする
				$arrPerfCd = array_unique($arrPerfCd);
				// カンマ区切りへ
				$result["asn_PrefCd"] = implode(",", $arrPerfCd);
			}
		}
		// INSERT_START AOSに転送するメールのタグ入力漏れ対応 2011/08/17 ss-sakakiabara
		$result["asn_send"] = "send";
		// INSERT_END AOSに転送するメールのタグ入力漏れ対応 2011/08/17 ss-sakakiabara
		
		return $result;
	}

	/**
	 * メールヘッダーで不要なKEY名称(リクエストパラメータ名称)であるか確認
	 *
	 * @param string $keyName キー名称
	 * @return boolean 不要か (true:不要  false:必要)
	 */
	protected function isDeleteMailHeaderKey($strKeyName)
	{
		$result = false;

		$deleteKeys
		= array(
				"go"
				,"Submit"
				,"BukkenCd"
				,"Fax"
				,"Tel"
				,"Mail"
				,"NameSei"
				,"NameMei"
				,"CntctWayFax"
				,"CntctWayTel"
				,"CntctWayMail"
				,"RailCd"
				,"NeedTimeKbn"
				,"Comment"
				,"CondDsp"
				,"isMobile"
				,"mode"
				,"PrefCd"
				);

				foreach ($deleteKeys as $key) {
					if (strcmp($strKeyName, $key) == 0)
					{
						$result = true;
						break;
					}
				}
				return $result;
	}

	/**
	 * ２配列の同キーの値を足す（数値のみとする）
	 * メインの配列にない要素は除去される
	 */
	public function arraySum($main,$sub) {

		$ckflg = false;
		foreach ($main as $key => $value) {
			if($value['table_name'] == $sub['table_name']){
				$main[$key]['count'] += $sub['count'];
				$ckflg = true;
				break;
			}
		}

		if($ckflg == false){
			array_push($main,$sub);
		}

		return $main;
	}
}
?>
